package org.zhq.core;

import java.io.Closeable;

/**
 * 接收数据的调度封装
 *
 * 把一个或者多个IoArgs组合成一份Packet
 * @author zhengquan
 * @date 2019/2/1
 */
public interface ReceiveDispatcher extends Closeable {

    /**
     * 开始接收数据
     */
    void start();

    /**
     * 停止接收数据
     */
    void stop();

    /**
     * 接收包信息的回调
     */
    interface ReceivePacketCallback{
        /**
         * 到达一个新的包信息
         *
         * @param type
         * @param length
         * @return
         */
        ReceivePacket<?, ?> onArrivedNewPacket(byte type, long length, byte[] headerInfo);

        /**
         * 接收包完成的回调
         *
         * @param packet
         */
        void onReceivedPacketCompleted(ReceivePacket packet);

        /**
         * 接收到一个心跳帧
         */
        void onReceivedHeartbeat();
    }
}
